/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

/**
 *
 * @author Utilizador
 */
@Entity
@Table(name = "VENDAS")
@NamedQuery(name = "findAllVendas", query = "SELECT v FROM Venda v")

public class Venda implements Serializable {
    
    @Id
    private int id;

    @ManyToOne

    private Farmacia farmacia;
    
    @OneToMany(mappedBy = "venda")

    private List<LinhaVenda> listaLinhasVenda;
    
    @Temporal(javax.persistence.TemporalType.DATE)

    private Date dataVenda;
   
    public Venda(int id, Date dataVenda, Farmacia farmacia) {
        this.id = id;
        this.dataVenda = dataVenda;
        this.farmacia = farmacia;
        listaLinhasVenda = new ArrayList<>();
    }

    public Venda(){ 
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<LinhaVenda> getListaLinhasVenda() {
        return listaLinhasVenda;
    }

    public void setListaLinhasVenda(List<LinhaVenda> listaLinhasVenda) {
        this.listaLinhasVenda = listaLinhasVenda;
    }

    public Date getDataVenda() {
        return dataVenda;
    }

    public void setDataVenda(Date dataVenda) {
        this.dataVenda = dataVenda;
    }

    public Farmacia getFarmacia() {
        return farmacia;
    }

    public void setFarmacia(Farmacia farmacia) {
        this.farmacia = farmacia;
    }    

    public void addLinhaVenda(LinhaVenda linhaVenda) {
        this.getListaLinhasVenda().add(linhaVenda);
    }
    
    public LinhaVenda getLinhaVenda(int linhaVendaId){
        return this.getListaLinhasVenda().get(linhaVendaId); 
    }
    
     public void removeLinhaVenda(LinhaVenda lv) {
        this.getListaLinhasVenda().remove(lv);
    }
     
    public int getNextLinhaVendaId(){
        return this.listaLinhasVenda.size() + 1;
    }

    public double calcularPreco() {
        double ammount = 0;
        for (LinhaVenda linha : listaLinhasVenda) {
            ammount += linha.getProdutoCatalogo().getPreco() * linha.getQuantidade();
        }
        return ammount;
    }
    
    

   

    
}